<?php
App::uses('AppController', 'Controller');
/**
 * Pagamentos Controller
 *
 * @property Pagamento $Pagamento
 */
class PagamentosController extends AppController {

	var $components = array('PagSeguro', 'EmailHandler');
	
	public function beforeFilter(){
		parent::beforeFilter();
		$this->Auth->allow('pagseguro_response');
	}
		
	public function index() {
		$this->Pagamento->recursive = 0;
		$this->set('pagamentos', $this->paginate());
	}

/**
 * view method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		if(!$this->isAdmin())
			$this->notAuth();
		if (!$this->Pagamento->exists($id)) {
			throw new NotFoundException(__('Invalid pagamento'));
		}
		$options = array('conditions' => array('Pagamento.' . $this->Pagamento->primaryKey => $id));
		$this->set('pagamento', $this->Pagamento->find('first', $options));
	}

	public function confirmar_inscricao(){
		if($this->Datas->getDataInicioInscricao() > date('Y-m-d H:i:s') || $this->Datas->getDataFimInscricao() < date('Y-m-d H:i:s') ){
			$this->Session->setFlash(__('Fora do prazo de inscrição (confirmar)'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('/pages/blank');
		}
		if ($this->request->is('post')) {
			$informacoes = $this->Pagamento->informacoes($this->request->data, $this->usuarioSessao);
			//pr($informacoes);
			$this->PagSeguro->gravaInformacoes($informacoes);
		}else{
			$this->redirect('add');
		}
	}
	
	public function retornoPagSeguro($hash){
		if($hash == $this->Session->read('Auth.User.Usuario.hash')){
			$pagamento = $this->Session->read('Pagamento');
			if($this->Pagamento->efetuarInscricao($pagamento, $this->usuarioSessao['Usuario']['id'])){
				$this->carregaSessao();
				$this->recarregaInscricao();
				$this->Session->setFlash(__('Inscrição efetuada com sucesso! Aguarde a confirmação do pagamento'), 'flash/bootstrap', array('class'=>'alert alert-success'));
				$this->redirect('/pages/blank');
			} else{
				$this->Session->setFlash(__('Não foi possível efetuar a sua inscrição! Tente novamente'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				$this->redirect(array('action'=>'add'));
			}
		}else{
			$this->Session->setFlash(__('Código de retorno inválido! Tente novamente'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->notAuth();
		}
	}
	
	public function efetuar(){
		if($this->Datas->getDataInicioInscricao() > date('Y-m-d H:i:s') || $this->Datas->getDataFimInscricao() < date('Y-m-d H:i:s') ){
			$this->Session->setFlash(__('Fora do prazo de inscrição (efetuar)'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('/pages/blank');
		}
		$codigo_de_retorno = $this->Session->read('Auth.User.Usuario.hash');
		$code = $this->PagSeguro->setup($codigo_de_retorno);
		if($code){
			$this->carregaSessao();
			$this->recarregaInscricao();
			$this->redirect(URL_PAGAMENTO_PAGSEGURO.$code);
		}
		else {
			$this->Pagamento->delete($id_inscricao['Pagamento']['id'], true);
			//$this->Session->setFlash(__('Não foi possível efetuar a sua inscrição! Tente novamente'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->redirect(array('action'=>'add'));
		}
	}
	
	public function pagseguro_response(){
		$code = $this->request->data['notificationCode'];
		$this->autoRender = false;
		$this->layout = null;
		$notification = $this->PagSeguro->getNotificacaoAndSave($code);
		if($notification){
			$dados = $this->PagSeguro->getTransactionCodeAndInscricaoId($notification['PagseguroTransacao']['id']);
			$pagamento = $this->Pagamento->findByUsuarioId($dados['inscricao']);
			if(empty($pagamento['Pagamento']['hash'])){
				$this->Pagamento->id = $pagamento['Pagamento']['id'];
				$this->Pagamento->saveField('hash',$dados['code']);
			}
			if($notification['PagseguroTransacao']['pagseguro_status_id'] == 3){
				$this->Pagamento->id = $pagamento['Pagamento']['id'];
				$this->Pagamento->saveField('confirmado',1);
				$this->recarregaInscricao();
			}
		}
	}
	
	public function minha_inscricao(){
		if($this->usuarioSessao['Inscricao']['inscricao_feita']){
			$this->Pagamento->recursive = 2;
			$this->Pagamento->unbindModel(array('belongsTo'=>array('Usuario')));
			$inscricao = $this->Pagamento->findByUsuarioId($this->usuarioSessao['Usuario']['id']);
			$status_atual = $this->Pagamento->getStatusAtual($this->usuarioSessao['Usuario']['id']);
			$this->set('inscricao', $inscricao);
			$this->set('status', $status_atual);
		}else{
			$this->notAuth();
		}
	}

	
	public function add(){
		if($this->Datas->getDataInicioInscricao() > date('Y-m-d H:i:s') || $this->Datas->getDataFimInscricao() < date('Y-m-d H:i:s') ){
			$this->Session->setFlash(__('Fora do prazo de inscrição'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->redirect('/pages/blank');
		}
		if(!$this->tenhoInscricao()){
			if ($this->Session->check('Pagamento')) {
				$this->Session->delete('Pagamento');
			}
			$this->loadModel('Curso');
			$cursos = $this->Curso->find('list');
			$cursos_com_material = $this->Curso->find('list', array('conditions'=>array('material'=>true)));
			$preco = $this->Pagamento->calculaPreco($this->usuarioSessao['Usuario']);
			if(!$preco){
				$this->Session->setFlash(__('Você não pode fazer inscrição ainda! Aguarde o período de inscrição'), 'flash/bootstrap', array('class'=>'alert alert-block'));
				$this->redirect('/pages/blank');
			}
			$this->set(compact('cursos', 'preco', 'cursos_com_material'));
		}
		else $this->notAuth();
	}

/**
 * edit method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		if(!$this->isAdmin())
			$this->notAuth();
		if (!$this->Pagamento->exists($id)) {
			throw new NotFoundException(__('Invalid pagamento'));
		}
		if ($this->request->is('post') || $this->request->is('put')) {
			if ($this->Pagamento->save($this->request->data)) {
				$this->Session->setFlash(__('The pagamento has been saved'));
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('The pagamento could not be saved. Please, try again.'));
			}
		} else {
			$options = array('conditions' => array('Pagamento.' . $this->Pagamento->primaryKey => $id));
			$this->request->data = $this->Pagamento->find('first', $options);
		}
		$users = $this->Pagamento->Usuario->find('list');
		$this->set(compact('users'));
	}

/**
 * delete method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		if(!$this->isAdmin())
			$this->notAuth();
		$this->Pagamento->id = $id;
		if (!$this->Pagamento->exists()) {
			throw new NotFoundException(__('Inscrição inválida !'));
		}
		$this->request->onlyAllow('post', 'delete');
		$this->Pagamento->unbindModel(array('belongsTo'=>array('Usuario')));
		if ($this->Pagamento->delete()) {
			$this->Session->setFlash(__('A inscrição foi removida.'), 'flash/bootstrap', array('class'=>'alert alert-success'));
			$this->redirect(array('controller' => 'usuarios', 'action' => 'index'));
		}
		$this->Session->setFlash(__('Erro ao tentar remover a inscrição.'), 'flash/bootstrap', array('class'=>'alert alert-error'));
		$this->redirect(array('controller' => 'usuarios', 'action' => 'index'));
	}
	
	public function pagamentos_forma_pagamento(){
		$this->Pagamento->unbindModel(array('hasMany'=>array('CursosUsuario')));
		$dados = $this->Pagamento->formas_de_pagamento();
		$this->loadModel('PagseguroFormasPagamento');
		$this->set('formas', $this->PagseguroFormasPagamento->find('list'));
		$this->set('dados', $dados);
	}
}
